<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // webstorm  ide 集成开发环境

        // 前面书写了构造函数 
        // 书写了对象 

        // 每一个函数 天生自带一个属性 prototype ,是一个对象结构
        // 每个对象 天生自带一个属性 __proto__ (两个下划线) 
        // 指向所属构造函数的 prototype 

        // function test(){

        // }

        // console.log(test.prototype);

        // var obj = {
        //     name:'zhangsan',
        //     run:function(){
        //         return this.name
        //     }
        // }

        // console.log(obj.__proto__);

        function Person(name,age){
            this.name = name;
            this.age = age

        }

        // 构造函数也是函数 天生自带一个 prototype 

        // console.log(Person.prototype) 是一个对象的结构  
        console.log('构造函数的prototype',Person.prototype) 
        Person.prototype.eat = function(){
            console.log('九转大肠');
        }

        console.log('添加了eat以后',Person.prototype) 


        var p1 = new Person('张三',18);
        // p1是构造函数实例出来的一个对象
        // 对象天生自带__proto__ 
        console.log('p1.__proto__',p1.__proto__);

        // p1属于 Person构造函数  是Person构造函数的 一个实例
        // p1.__proto__ => Person.prototype 

        console.log(p1.__proto__ === Person.prototype) // true

        // 构造函数 -> 实例化一个对象 

        // 访问规则:
        //当我们去访问一个对象的时候，首先看自己身上有没有
        
        // 如果有直接用 停止查找 
        // 如果沒有 自動到自己__proto__查找

        // p1.eat();
        function Person1(name,age){
            this.name = name;
            this.age = age;

        }

        Person1.prototype.sing = function(){
            console.log('爱的供养');
        }


        var p1 = new Person1('GUANRUI',19);
        var p2 = new Person1('YANGLU',20);
        p1.sing = function(){
            console.log('大鱼')
        }

        console.log(p1.__proto__);
        console.log(p2.__proto__);

        p1.sing()
        p2.sing()

        // 访问对象 如果对象中有 直接用停止查找 
        // 如果没有 去查找自己的__proto__ 等同于查所属构造函数的prototype 

        // p1 有 sing 所以打印大鱼 
        // p2 没有sing 找自己的__proto__ 等于找Person1的prototype





    </script>